package ch2;

/**
 * Java语言规范保证一个线程（线程A）终止后，该线程（线程A）对共享变量的更新对于 调用该线程join方法的线程（线程B）而言是可见的
 */

public class ThreadJoinVisibility {
    // 线程间的共享变量
    static int data = 0;

    public static void main(String[] args) {
        Thread thread = new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep((int) (Math.random() * 50));
                    data = 1;
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        thread.start();
        // 等待线程thread（子线程）结束后，main线程（主线程）再继续执行
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 子线程结束后，主线程读取data的值
        System.out.println(data);
    }
}
